const express = require("express");
const { createServer: createViteServer } = require("vite");

var session = require("express-session");
// const jwt = require("jsonwebtoken");
// const secret = "pi-sso"
async function createServer() {
  const app = express();
  app.use(
    session({
      secret: "$pi-data",
      name: "integration",
      cookie: { maxAge: 60 * 60000 },
      resave: false,
      saveUninitialized: true,
    })
  );

  app.get("/api/login", (req, res) => {
    req.session.token = "123456789";
    res.send({
      code: 0,
      msg: "登陆成功",
    });
  });
  app.get("/api/logout", (req, res) => {
    req.session.token = null;
    res.send({
      code: 0,
      msg: "退出成功",
    });
  });

  app.use(async (req, res, next) => {
    if (req.query.token) {
      req.session.token = req.query.token;
      res.redirect(`http://${req.headers.host}${req.path}`);
      return;
    }
    let token = req.session.token;
    if (token) {
      req.session.token = token;
      req.headers.access_token = token;
      req.headers.token = token;
      next();
    } else {
      res.redirect(`/api/login`);
    }
  });
  // 以中间件模式创建 Vite 应用，这将禁用 Vite 自身的 HTML 服务逻辑
  // 并让上级服务器接管控制
  //
  // 如果你想使用 Vite 自己的 HTML 服务逻辑（将 Vite 作为
  // 一个开发中间件来使用），那么这里请用 'html'
  const vite = await createViteServer({
    server: { middlewareMode: "html" },
  });
  // 使用 vite 的 Connect 实例作为中间件
  app.use(vite.middlewares);

  app.use("*", async (req, res) => {
    // 服务 index.html - 下面我们来处理这个问题
  });

  app.listen(3002);
}

createServer();
